Engineering COPL-style language interpreters
Our course, concepts of programming languages (not required for this topic, but certainly helpful), uses interpreters to study how specific foundational language features work.
However, a realistic language implementation requires much more than what we have discussed in our interpreters – not in terms of supported language concepts, but rather in terms of functionality expected of the implementation. These may include:
- Parsing
- Error reporting
- Compilation to machine code
- Runtime optimizations
- Syntax highlighting
- Code formatting
- Refactorings
These days, one does not have to start from scratch when implementing language tooling. Solutions that will help might include:
- parsley parser combinators
- a language server protocol implementation
- GraalVM and the Truffle framework
- Web Assembly as a compilation target
- LLVM as a compilation target
- Treesitter language grammars
If you choose this project topic, we will work with you to figure out an interesting slice of the problems/techniques above to work on. Feel free to already propose a focus area if you have something that interests you. None of the above lists are meant to be exhaustive – though we do ask for solutions we could potentially integrate with the actual COPL interpreters.